#include <thread>
#include <iostream>
#include <vector>
#include <mutex>

using namespace std;

thread_local long long sum = 0;           // 线程局部存储变量，在每个线程中都是独立的
mutex mu;                           // 互斥量，用于对cout输出进行控制

void thread_func()                  //线程执行函数，计算1到1000000的和
{
    for(int i = 1;i < 1000000; ++i)
    {
        sum += i;                   // 此处的sum在每个线程中都有一个实例，不会相互影响
    }
    {
        lock_guard<mutex> lck(mu);
        cout<<"Thread "<<this_thread::get_id()<<" sum="<<sum << endl;
    }
}

int main()
{
    vector<thread> th_v;            //存储线程的容器
    for(int i = 0;i < 10;++i)       //创建10个线程
    {
        th_v.push_back(thread(thread_func));
    }
    for(auto &th : th_v)
    {
        th.join();                  // 等待所有线程完成
    }
    cout<<"Main Thread "<<this_thread::get_id()<<" sum="<<sum <<endl;
}